package com.pengcheng;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;

/**
 * @Author 章鹏程
 * @Date 2020/9/14 22:08
 **/
// 代码生成器
public class PCCode {
    public static void main(String[] args) {
        // 需要构建一个 代码生成器 对象
        AutoGenerator mpg = new AutoGenerator();
        // 配置策略

        // 1、全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        globalConfig.setOutputDir(projectPath+"/src/main/java");
        globalConfig.setAuthor("章鹏程");
        globalConfig.setOpen(false); // 是否打开资源管理器
        globalConfig.setFileOverride(false); // 是否覆盖
        globalConfig.setServiceName("%sService"); // 去Service的I前缀
        globalConfig.setIdType(IdType.ID_WORKER); // 主键 默认
        globalConfig.setDateType(DateType.ONLY_DATE); // 仅仅是日期类型
//        globalConfig.setSwagger2(true);

        mpg.setGlobalConfig(globalConfig);

        // 2、设置数据源
        DataSourceConfig sourceConfig = new DataSourceConfig();
        sourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?useSSL=false&useUnicode=utf-8&serverTimezone=Asia/Shanghai");
        sourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        sourceConfig.setUsername("root");
        sourceConfig.setPassword("123456");
        sourceConfig.setDbType(DbType.MYSQL);

        mpg.setDataSource(sourceConfig);

        // 3、包的配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setModuleName("sys"); // 生成模块
        packageConfig.setParent("com.pengcheng.modules");
        packageConfig.setEntity("entity");
        packageConfig.setMapper("dao");
        packageConfig.setService("service");
        packageConfig.setController("controller");

        mpg.setPackageInfo(packageConfig);

        // 4、策略配置
        StrategyConfig strategy = new StrategyConfig();

        strategy.setInclude("user"); // 设置要映射的表名

        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);

        strategy.setLogicDeleteFieldName("deleted");
        // 自动填充配置
        TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
        TableFill gmtModified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);
        ArrayList<TableFill> tableFills = new ArrayList<>();
        tableFills.add(gmtCreate);
        tableFills.add(gmtModified);
        // 乐观锁
//        strategy.setVersionFieldName("version");

        // 驼峰命名格式
        strategy.setRestControllerStyle(true);
        // localhost:8080/hello_id_2
        strategy.setControllerMappingHyphenStyle(true);

        mpg.setStrategy(strategy);


        // ==============================
        mpg.execute();

    }
}
